﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TumbaloSoft.Models;
using TumbaloSoft.Helpers;

namespace TumbaloSoft.Controllers
{
    public class AreaComunController : TumbaloController
    {
        //
        // GET: /AreaComun/
        private static Object lockObject = new Object();
        public ActionResult Index()
        {
            if (defaultAction != null) return defaultAction;
            return View();
        }

        public ActionResult Nuevo(int? prIdEdificio)
        {
            if (defaultAction != null) return defaultAction;

            if (!prIdEdificio.HasValue)return HttpNotFound();
            AreaComun area = new AreaComun();
            area.prEdificio = new Edificio();
            area.prEdificio.prIdEdificio = prIdEdificio.Value;
            return View(area);
        }

        [HttpPost]
        public ActionResult Nuevo(AreaComun area)
        {
            if (defaultAction != null) return defaultAction;
            ModelState.Remove("prEdificio.prNombre");
            ModelState.Remove("prEdificio.prDireccion");
            ModelState.Remove("prEdificio.prArea");
            ModelState.Remove("prEdificio.prNroPisos");
            ModelState.Remove("prEdificio.prMonto");
            ModelState.Remove("prIdAreaComun");
            if (ModelState.IsValid)
            {
                try
                {
                    lock (lockObject)
                    {
                        area.prIdAreaComun = HelperAreaComun.selectMaxCodigo() + 1;
                        HelperAreaComun.insert(area);
                    }
                }
                catch(Exception ex)
                {
                    Logger.Current.Error("error al insertar un area comun", ex);
                    return View("~/Views/Shared/Error.cshtml");
                }
                ViewBag.mensaje = "Se registro correctamente el área común con ID= "+area.prIdAreaComun+" en el edificio con ID= " + area.prEdificio.prIdEdificio;
                ViewBag.returnURL = "/Edificios/modificar?id=" + area.prEdificio.prIdEdificio;
                return View("~/Views/Shared/Exito.cshtml");
            }
            return View(area);
        }


        public ActionResult Modificar(int? id)
        {
            if (defaultAction != null) return defaultAction;
            if (!id.HasValue)return HttpNotFound();
            AreaComun area;
            try
            {
                area = HelperAreaComun.selectById(id.Value);
            }
            catch(Exception ex)
            {
                Logger.Current.Error("error al cargar un area comun", ex);
                return View("~/Views/Shared/Error.cshtml");
            }
            if (area == null) return HttpNotFound();
            return View(area);
        }

        [HttpPost]
        public ActionResult Modificar(AreaComun area)
        {
            if (defaultAction != null) return defaultAction;
            ModelState.Remove("prEdificio.prNombre");
            ModelState.Remove("prEdificio.prDireccion");
            ModelState.Remove("prEdificio.prArea");
            ModelState.Remove("prEdificio.prNroPisos");
            ModelState.Remove("prEdificio.prMonto");
            if (ModelState.IsValid)
            {
                try
                {
                    HelperAreaComun.update(area);
                }
                catch(Exception ex)
                {
                    Logger.Current.Error("error al actualizar un area comun", ex);
                    return View("~/Views/Shared/Error.cshtml");
                }
                ViewBag.mensaje = "Se modificó correctamente el área común con ID= " + area.prIdAreaComun;
                ViewBag.returnURL = "/Edificios/modificar?id=" + area.prEdificio.prIdEdificio;
                return View("~/Views/Shared/Exito.cshtml");
            }
            return View(area);
        }

        public ActionResult Eliminar(int? id)
        {
            if (defaultAction != null) return defaultAction;
            if (!id.HasValue) return HttpNotFound() ;
            AreaComun area;
            try
            {
                area = HelperAreaComun.selectById(id.Value);
            }
            catch(Exception ex)
            {
                Logger.Current.Error("error al cargar un area comun", ex);
                return View("~/Views/Shared/Error.cshtml");
            }
            return View(area);
        }

        [HttpPost]
        public ActionResult Eliminar(AreaComun area)
        {
            if (defaultAction != null) return defaultAction;
            ModelState.Remove("prEdificio.prNombre");
            ModelState.Remove("prEdificio.prDireccion");
            ModelState.Remove("prEdificio.prArea");
            ModelState.Remove("prEdificio.prNroPisos");
            ModelState.Remove("prEdificio.prMonto");
            if (ModelState.IsValid)
            {
                try
                {
                    HelperAreaComun.delete(area);
                }
                catch(Exception ex)
                {
                    Logger.Current.Error("error al eliminar un area comun", ex);
                    return View("~/Views/Shared/Error.cshtml");
                }
                ViewBag.mensaje = "Se eliminó correctamente el área común con ID= " + area.prIdAreaComun;
                ViewBag.returnURL = "/Edificios/modificar?id=" + area.prEdificio.prIdEdificio;
                return View("~/Views/Shared/Exito.cshtml");
            }
            return View(area);
        }


    }
}
